/**
 * функция обновления списка папок
 * @param files список папок и файлов
 */
function updateFolders(files) {
    var links = files.collect(
            function(value, index) {
                if (value.isDirectory == 'false') return "";
                var path = [value.path, value.name].join("/");
                return "<div class='folderClass' onclick='cd(\"" + value.path + "\")'><img src='i/folder.png' width='16' height='16' alt='folder' title='folder'/>" + value.name + "</div>";
            }
            );

    $('folders').innerHTML = links.join("");
}

function selectFile(filePath) {
    window.opener.CKEDITOR.tools.callFunction('2', filePath);
    window.close();
}

function subpath(str, delim, ix) {
    var all = str.split(delim);
    var some = all.findAll(
            function(v, i) {
                return (i <= ix);
            }
            );
    return some.join(delim);
}
function updatePath(path) {
    var crumbs = path.split("/");
    var s = '';

    for (var i = 1; i < crumbs.length; i++) {
        var p = subpath(path, "/", i);
        s += "<span  onclick='cd(\"" + p + "\")'>/"
                + crumbs[i] + "</span>";
    }
    $('filepath').innerHTML = s;
}

/**
 * функция обновление списка файлов
 * @param files список файлов и папок
 */
function updateFiles(files) {
    var links = files.collect(
            function(value, index) {
                if (value.isDirectory == 'true') return "";
                var path = [value.path, value.name].join("/");
                i = "<span style='margin: 5px 5px 5px 5px;'>" +
                        "<img width='50' onclick='selectFile(\"" + value.path + "\")' src='" + value.path + "'/>"
//                        +"<span style='text-align:center;'>" + value.name + "</span>"
                        + "</span>";
                return i;
            }
            );
    $('content').innerHTML = "<div class='scroll'>" + links.join("") + "</div>";
}
/**
 * функция для получения списка файлов и папок
 * @param action url для запроса обработчика
 * @param params параметры запроса. в параметрах передаются target url
 */
function list(action, params) {
    var result = null;
    new Ajax.Request(action, {
        parameters:params,
        method: "get",
        requestHeader:{Accept: "application/json"},
        onSuccess:function(transport) {
            var jsonData = transport.responseText.evalJSON();
            result = jsonData.response.files;
            updateFiles(result);
            updateFolders(result);
            updatePath(jsonData.response.currentPath);
        }
    });
    return result;
}


/**
 * фунция загрузки файла
 * форма должна содержать параметр  enctype="multipart/form-data"
 * @param formId идентификатор формы
 * @param action url обработчика при загрузки файлов
 */
function uploadFile(formId, action) {
    //    var form = $(formId).serialize(true);
    var f = $(formId);
    /*
     т.к. текущий путь к папке передается как GET запрос, то сохраним оригинальный, а потом его
     используем, это необходимо сделать т.к. при возвращение результата, в экшене будет стоять наш тупь
     и если нужно будет загрузить еще файл, то путь будет не корректный.
     */
    var realAction = f.action;
    /* рандомное значение, что бы некешировалось */
    var n = 'f' + Math.floor(Math.random() * 99999);

    /**
     * создаем временный элемен, куда придет ответ от сервера, но не показываем его. После загрузки его нужно будет удалить
     */
    var d = document.createElement('DIV');
    var cp = $('currentPath').value;
    d.innerHTML = '<iframe style="display:none" src="about:blank" id="' + n + '" name="' + n + '"></iframe>';
    document.body.appendChild(d);
    f.target = n;
    f.action = f.action + '?path=' + cp;
    f.submit();
    /* возвращает реальный экшен без пути к папке */
    f.action = realAction;
    document.body.removeChild(d);
    cd(cp);
}

function cd(path) {
    list('/list.action', 'path=' + path);
    $('currentPath').value = path;
}


function createFolder() {
    var folderName = prompt("Input folder name", "");
    if (folderName != null) {
        new Ajax.Request('/createFolder.action', {
            parameters:'folderName=' + folderName + '&path=' + $('currentPath').value,
            onSuccess:function(transport) {
                var jsonData = transport.responseText.evalJSON();
                result = jsonData.response.files;
                updateFiles(result);
                updateFolders(result);
                updatePath(jsonData.response.currentPath);
            }
        });
    }
}
